package main

import (
	"fmt"
)

/*
大数求和，字符串形式的数字，eg."3123798239812738534525345342342"+"123123125436457234247"
*/

func addStrings(num1 string, num2 string) string {
	i, j := len(num1)-1, len(num2)-1
	carry := 0 // 进位
	result := make([]byte, 0)

	// 从低位到高位逐位相加
	for i >= 0 || j >= 0 || carry > 0 {
		sum := carry

		if i >= 0 {
			sum += int(num1[i] - '0') // 直接转换字符为数字
			i--
		}

		if j >= 0 {
			sum += int(num2[j] - '0')
			j--
		}

		// 当前位的值和进位
		result = append(result, byte(sum%10+'0'))
		carry = sum / 10
	}

	// 反转结果（因为我们是从低位到高位添加的）
	for left, right := 0, len(result)-1; left < right; left, right = left+1, right-1 {
		result[left], result[right] = result[right], result[left]
	}

	return string(result)
}

func main() {
	// 测试修正后的版本
	fmt.Println(addStrings("123", "456")) // 应该输出: 579
	fmt.Println(addStrings("9", "99"))    // 应该输出: 108
	fmt.Println(addStrings("11", "123"))  // 应该输出: 134
	fmt.Println(addStrings("0", "0"))     // 应该输出: 0

	// 额外测试用例
	fmt.Println(addStrings("999", "1")) // 应该输出: 1000
	fmt.Println(addStrings("", "123"))  // 边界情况
}
